<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>API自动化测试框架 - 项目指南</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            line-height: 1.6;
            color: #333;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            min-height: 100vh;
        }

        .container {
            max-width: 1600px;
            margin: 0 auto;
            padding: 20px;
        }

        .header {
            text-align: center;
            background: rgba(255, 255, 255, 0.95);
            padding: 40px 20px;
            border-radius: 20px;
            margin-bottom: 30px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
        }

        .header h1 {
            font-size: 3em;
            color: #2c3e50;
            margin-bottom: 10px;
            background: linear-gradient(45deg, #667eea, #764ba2);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            background-clip: text;
        }

        .header p {
            font-size: 1.2em;
            color: #666;
            margin-bottom: 20px;
        }

        .badges {
            display: flex;
            justify-content: center;
            gap: 10px;
            flex-wrap: wrap;
        }

        .badge {
            background: #3498db;
            color: white;
            padding: 5px 12px;
            border-radius: 15px;
            font-size: 0.9em;
            text-decoration: none;
            transition: transform 0.3s ease;
        }

        .badge:hover {
            transform: translateY(-2px);
        }

        .nav-tabs {
            display: flex;
            justify-content: center;
            background: rgba(255, 255, 255, 0.9);
            border-radius: 15px;
            padding: 8px;
            margin-bottom: 30px;
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
            flex-wrap: nowrap;
            gap: 3px;
            overflow-x: auto;
        }

        .nav-tab {
            padding: 10px 18px;
            background: transparent;
            border: none;
            border-radius: 10px;
            cursor: pointer;
            font-size: 0.9em;
            font-weight: 500;
            color: #666;
            transition: all 0.3s ease;
            white-space: nowrap;
            flex-shrink: 0;
        }

        .nav-tab.active {
            background: linear-gradient(45deg, #667eea, #764ba2);
            color: white;
            transform: translateY(-2px);
            box-shadow: 0 5px 15px rgba(102, 126, 234, 0.4);
        }

        .nav-tab:hover:not(.active) {
            background: #f8f9fa;
            transform: translateY(-1px);
        }

        .tab-content {
            display: none;
            background: rgba(255, 255, 255, 0.95);
            border-radius: 20px;
            padding: 30px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
            animation: fadeIn 0.5s ease;
        }

        .tab-content.active {
            display: block;
        }

        @keyframes fadeIn {
            from { opacity: 0; transform: translateY(20px); }
            to { opacity: 1; transform: translateY(0); }
        }

        .feature-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
            gap: 20px;
            margin: 20px 0;
        }

        .feature-card {
            background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
            padding: 25px;
            border-radius: 15px;
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
            transition: transform 0.3s ease, box-shadow 0.3s ease;
            border-left: 5px solid #667eea;
        }

        .feature-card:hover {
            transform: translateY(-5px);
            box-shadow: 0 15px 35px rgba(0, 0, 0, 0.15);
        }

        .feature-card h3 {
            color: #2c3e50;
            margin-bottom: 15px;
            font-size: 1.3em;
            display: flex;
            align-items: center;
            gap: 10px;
        }

        .feature-card .icon {
            font-size: 1.5em;
        }

        .feature-card ul {
            list-style: none;
            padding-left: 0;
        }

        .feature-card li {
            padding: 8px 0;
            border-bottom: 1px solid rgba(0, 0, 0, 0.1);
            position: relative;
            padding-left: 25px;
        }

        .feature-card li:before {
            content: '✅';
            position: absolute;
            left: 0;
            top: 8px;
        }

        .feature-card li:last-child {
            border-bottom: none;
        }

        .code-block {
            background: #2d3748;
            color: #e2e8f0;
            padding: 20px;
            border-radius: 10px;
            margin: 15px 0;
            overflow-x: auto;
            font-family: 'Courier New', monospace;
            position: relative;
            white-space: pre-wrap;
            word-wrap: break-word;
        }

        .code-block:before {
            content: 'bash';
            position: absolute;
            top: 5px;
            right: 10px;
            background: #4a5568;
            padding: 2px 8px;
            border-radius: 5px;
            font-size: 0.8em;
        }

        .quick-start {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            border-radius: 15px;
            margin: 20px 0;
        }

        .quick-start h3 {
            margin-bottom: 20px;
            font-size: 1.5em;
        }

        .step {
            display: flex;
            align-items: center;
            margin: 15px 0;
            gap: 15px;
        }

        .step-number {
            background: rgba(255, 255, 255, 0.2);
            width: 40px;
            height: 40px;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            font-weight: bold;
            font-size: 1.2em;
        }

        .table-container {
            overflow-x: auto;
            margin: 20px 0;
            border-radius: 10px;
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
        }

        table {
            width: 100%;
            border-collapse: collapse;
            background: white;
            border-radius: 10px;
            overflow: hidden;
            min-width: 600px;
        }

        th, td {
            padding: 12px 15px;
            text-align: left;
            border-bottom: 1px solid #e2e8f0;
            vertical-align: top;
        }

        th {
            background: linear-gradient(45deg, #667eea, #764ba2);
            color: white;
            font-weight: 600;
            white-space: nowrap;
        }

        tr:hover {
            background: #f8f9fa;
        }

        td {
            word-wrap: break-word;
            max-width: 200px;
        }

        .highlight {
            background: linear-gradient(45deg, #ffeaa7, #fab1a0);
            padding: 20px;
            border-radius: 10px;
            margin: 20px 0;
            border-left: 5px solid #e17055;
        }

        .highlight h4 {
            color: #2d3436;
            margin-bottom: 10px;
        }

        .footer {
            text-align: center;
            padding: 40px 20px;
            background: rgba(255, 255, 255, 0.9);
            border-radius: 15px;
            margin-top: 30px;
            color: #666;
        }

        @media (max-width: 768px) {
            .header h1 {
                font-size: 2em;
            }
            
            .nav-tabs {
                flex-direction: column;
                gap: 8px;
            }
            
            .nav-tab {
                padding: 10px 16px;
                font-size: 0.9em;
            }
            
            .feature-grid {
                grid-template-columns: 1fr;
                gap: 15px;
            }
            
            .container {
                padding: 10px;
            }
            
            .tab-content {
                padding: 20px;
            }
            
            .step {
                flex-direction: column;
                align-items: flex-start;
                gap: 10px;
            }
            
            .step-number {
                align-self: flex-start;
            }
            
            .code-block {
                font-size: 0.85em;
                padding: 15px;
            }
            
            table {
                min-width: 500px;
            }
            
            th, td {
                padding: 8px 10px;
                font-size: 0.9em;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <!-- 头部信息 -->
        <div class="header">
            <h1>🚀 API自动化测试框架</h1>
            <p>基于 FastAPI + pytest 的企业级 API 自动化测试解决方案</p>
            <div class="badges">
                <span class="badge">Python 3.8+</span>
                <span class="badge">FastAPI 0.104+</span>
                <span class="badge">pytest 7.4+</span>
                <span class="badge">Allure 2.24+</span>
                <span class="badge">Docker Ready</span>
            </div>
        </div>

        <!-- 导航标签 -->
        <div class="nav-tabs">
            <button class="nav-tab active" onclick="showTab('overview')">📋 项目概览</button>
            <button class="nav-tab" onclick="showTab('features')">✨ 核心功能</button>
            <button class="nav-tab" onclick="showTab('quickstart')">🚀 快速开始</button>
            <button class="nav-tab" onclick="showTab('testing')">🧪 测试指南</button>
            <button class="nav-tab" onclick="showTab('excel')">📊 Excel测试</button>
            <button class="nav-tab" onclick="showTab('performance')">⚡ 性能测试</button>
            <button class="nav-tab" onclick="showTab('scenarios')">🎯 场景分析</button>
            <button class="nav-tab" onclick="showTab('api')">📚 API文档</button>
            <button class="nav-tab" onclick="showTab('deployment')">🐳 部署运维</button>
        </div>

        <!-- 项目概览 -->
        <div id="overview" class="tab-content active">
            <h2>📋 项目概览</h2>
            
            <div class="highlight">
                <h4>🎯 项目定位</h4>
                <p>这是一个完整的企业级API自动化测试解决方案，集成了现代化的测试框架和工具链，支持从单元测试到性能测试的全方位测试需求。</p>
                <p><strong>核心价值</strong>：通过标准化的测试流程和丰富的测试工具，帮助开发团队快速构建高质量的API服务，确保系统的稳定性和可靠性。</p>
                <p><strong>技术特色</strong>：采用现代Python生态系统，结合FastAPI的高性能特性和pytest的灵活性，提供从开发到部署的完整测试解决方案。</p>
            </div>
            
            <div class="badge-container">
                <span class="badge">Python 3.8+</span>
                <span class="badge">FastAPI 0.104+</span>
                <span class="badge">pytest 7.4+</span>
                <span class="badge">Allure 2.24+</span>
                <span class="badge">Docker Ready</span>
                <span class="badge">Excel Support</span>
                <span class="badge">Locust Performance</span>
                <span class="badge">CI/CD Ready</span>
            </div>

            <div class="feature-grid">
                <div class="feature-card">
                    <h3><span class="icon">🎯</span>完整的API服务</h3>
                    <ul>
                        <li>用户管理CRUD操作</li>
                        <li>自动生成API文档（Swagger UI & ReDoc）</li>
                        <li>数据验证和错误处理</li>
                        <li>CORS跨域支持</li>
                        <li>健康检查接口</li>
                    </ul>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">🧪</span>企业级测试框架</h3>
                    <ul>
                        <li>pytest + requests/httpx 测试栈</li>
                        <li>Allure 可视化测试报告</li>
                        <li>性能压力测试（Locust）</li>
                        <li>Excel数据驱动测试</li>
                        <li>完整中文支持</li>
                        <li>CI/CD 集成支持</li>
                    </ul>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">🏗️</span>现代化架构</h3>
                    <ul>
                        <li>模块化项目结构</li>
                        <li>灵活的配置管理</li>
                        <li>完善的日志系统</li>
                        <li>Docker 容器化支持</li>
                        <li>开发工具链集成</li>
                    </ul>
                </div>
            </div>

            <div class="table-container">
                <h3>📁 项目架构</h3>
                <table>
                    <thead>
                        <tr>
                            <th>目录</th>
                            <th>描述</th>
                            <th>主要文件</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>🚀 app/</td>
                            <td>FastAPI 应用核心</td>
                            <td>main.py, config.py, models/, services/</td>
                        </tr>
                        <tr>
                            <td>🧪 tests/</td>
                            <td>测试套件</td>
                            <td>test_api.py, data/, performance/, utils/</td>
                        </tr>
                        <tr>
                            <td>⚙️ config/</td>
                            <td>环境配置</td>
                            <td>development.yaml, production.yaml</td>
                        </tr>
                        <tr>
                            <td>🛠️ utils/</td>
                            <td>通用工具</td>
                            <td>logger.py, config_manager.py, helpers.py</td>
                        </tr>
                        <tr>
                            <td>📚 docs/</td>
                            <td>项目文档</td>
                            <td>api.md, testing.md</td>
                        </tr>
                    </tbody>
                </table>
            </div>
            
            <div class="feature-grid">
                <div class="feature-card">
                    <h3><span class="icon">🔧</span>故障排除</h3>
                    <ul>
                        <li><strong>端口占用</strong>：使用 <code>netstat -ano | findstr :8000</code> 检查端口</li>
                        <li><strong>依赖安装失败</strong>：尝试使用 <code>pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt</code></li>
                        <li><strong>权限问题</strong>：Windows用户以管理员身份运行命令行</li>
                        <li><strong>虚拟环境</strong>：确保激活虚拟环境后再安装依赖</li>
                        <li><strong>Docker问题</strong>：检查Docker Desktop是否正常运行</li>
                    </ul>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">💡</span>最佳实践</h3>
                    <ul>
                        <li><strong>版本管理</strong>：使用Git管理代码版本，定期提交更改</li>
                        <li><strong>环境隔离</strong>：为每个项目创建独立的虚拟环境</li>
                        <li><strong>配置管理</strong>：敏感信息放在.env文件中，不要提交到版本库</li>
                        <li><strong>测试先行</strong>：编写代码前先编写测试用例</li>
                        <li><strong>持续集成</strong>：配置CI/CD流水线自动运行测试</li>
                        <li><strong>文档更新</strong>：及时更新API文档和测试用例说明</li>
                    </ul>
                </div>
            </div>
            
            <div class="table-container">
                <h3>🚨 常见问题解决</h3>
                <table>
                    <thead>
                        <tr>
                            <th>问题</th>
                            <th>原因</th>
                            <th>解决方案</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>服务启动失败</td>
                            <td>端口被占用或依赖缺失</td>
                            <td>检查端口占用，重新安装依赖</td>
                        </tr>
                        <tr>
                            <td>测试用例执行失败</td>
                            <td>环境配置不正确</td>
                            <td>检查.env配置文件和数据库连接</td>
                        </tr>
                        <tr>
                            <td>Allure报告无法生成</td>
                            <td>Allure工具未安装</td>
                            <td>安装Allure命令行工具</td>
                        </tr>
                        <tr>
                            <td>Excel测试数据读取失败</td>
                            <td>文件路径或格式问题</td>
                            <td>检查Excel文件路径和格式</td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>

        <!-- 核心功能 -->
        <div id="features" class="tab-content">
            <h2>✨ 核心功能特性</h2>
            
            <div class="highlight">
                <h4>🎯 功能概述</h4>
                <p>本框架提供了从API开发到测试部署的完整解决方案，涵盖了现代软件开发中API测试的各个方面。每个功能模块都经过精心设计，确保易用性和扩展性的完美平衡。</p>
            </div>
            
            <div class="feature-grid">
                <div class="feature-card">
                    <h3><span class="icon">🚀</span>现代化架构</h3>
                    <p><strong>技术栈</strong>：采用FastAPI作为Web框架，结合SQLAlchemy ORM和Alembic数据库迁移工具</p>
                    <ul>
                        <li><strong>FastAPI框架</strong>：高性能异步Web框架，自动生成OpenAPI文档</li>
                        <li><strong>异步处理</strong>：支持async/await，提升并发处理能力</li>
                        <li><strong>自动文档</strong>：Swagger UI和ReDoc双重API文档支持</li>
                        <li><strong>数据验证</strong>：基于Pydantic的强类型数据验证和序列化</li>
                        <li><strong>依赖注入</strong>：灵活的依赖注入系统，便于测试和扩展</li>
                    </ul>
                    <p><em>适用场景：微服务架构、高并发API服务、RESTful API开发</em></p>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">🔧</span>完整测试体系</h3>
                    <p><strong>测试引擎</strong>：基于pytest构建的企业级测试框架，支持多种测试类型和报告格式</p>
                    <ul>
                        <li><strong>pytest框架</strong>：功能强大的测试框架，支持参数化、夹具、插件扩展</li>
                        <li><strong>Allure报告</strong>：美观的可视化测试报告，支持历史趋势分析</li>
                        <li><strong>多维度覆盖</strong>：单元测试、集成测试、API测试、性能测试全覆盖</li>
                        <li><strong>智能断言</strong>：丰富的断言库，支持JSON、XML、数据库等多种数据格式</li>
                        <li><strong>并行执行</strong>：支持多进程并行测试，大幅提升执行效率</li>
                        <li><strong>CI/CD集成</strong>：无缝集成Jenkins、GitLab CI、GitHub Actions</li>
                    </ul>
                    <p><em>适用场景：回归测试、持续集成、质量保证、自动化测试</em></p>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">📊</span>Excel数据驱动</h3>
                    <p><strong>数据管理</strong>：基于Excel的可视化测试数据管理，支持大批量测试用例的维护和执行</p>
                    <ul>
                        <li><strong>Excel支持</strong>：完整支持.xlsx格式，多工作表管理不同测试场景</li>
                        <li><strong>动态数据</strong>：自动生成时间戳、UUID等唯一标识，避免数据冲突</li>
                        <li><strong>智能筛选</strong>：支持按API方法、路径、标签等多维度筛选测试用例</li>
                        <li><strong>参数化测试</strong>：一个测试方法支持多组数据，提升测试覆盖率</li>
                        <li><strong>数据验证</strong>：内置数据格式校验，确保测试数据的有效性</li>
                        <li><strong>统计分析</strong>：自动生成测试数据统计报告和执行分析</li>
                    </ul>
                    <p><em>适用场景：大批量测试、数据驱动测试、业务场景测试、回归测试</em></p>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">🌐</span>中文全支持</h3>
                    <p><strong>国际化</strong>：完整的中文环境支持，解决中文测试场景中的编码和显示问题</p>
                    <ul>
                        <li><strong>UTF-8编码</strong>：全面支持UTF-8编码，中文字符无乱码问题</li>
                        <li><strong>中文测试用例</strong>：支持中文测试用例名称、描述和断言信息</li>
                        <li><strong>中文数据处理</strong>：正确处理中文测试数据的输入、存储和验证</li>
                        <li><strong>本地化报告</strong>：Allure报告完整支持中文显示和搜索</li>
                        <li><strong>日志中文化</strong>：测试日志支持中文输出，便于问题定位</li>
                        <li><strong>Excel中文</strong>：Excel测试数据完整支持中文内容</li>
                    </ul>
                    <p><em>适用场景：中文业务系统、本土化应用、中文API接口测试</em></p>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">🎯</span>智能断言</h3>
                    <p><strong>验证引擎</strong>：多层次的响应验证机制，确保API接口的正确性和稳定性</p>
                    <ul>
                        <li><strong>状态码验证</strong>：HTTP状态码的精确匹配和范围检查</li>
                        <li><strong>响应体验证</strong>：JSON、XML、HTML等多格式响应内容验证</li>
                        <li><strong>数据结构检查</strong>：字段类型、必填项、数据格式的严格验证</li>
                        <li><strong>业务逻辑断言</strong>：自定义业务规则验证，支持复杂逻辑判断</li>
                        <li><strong>性能断言</strong>：响应时间、吞吐量等性能指标的阈值检查</li>
                        <li><strong>链式断言</strong>：支持多个断言条件的组合验证</li>
                    </ul>
                    <p><em>适用场景：接口正确性验证、数据完整性检查、业务规则验证</em></p>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">📈</span>性能监控</h3>
                    <p><strong>性能测试</strong>：集成Locust性能测试框架，提供全方位的性能监控和分析能力</p>
                    <ul>
                        <li><strong>负载测试</strong>：模拟真实用户负载，验证系统承载能力</li>
                        <li><strong>压力测试</strong>：逐步增加负载，找出系统性能瓶颈</li>
                        <li><strong>并发测试</strong>：高并发场景下的系统稳定性验证</li>
                        <li><strong>实时监控</strong>：Web界面实时查看测试进度和性能指标</li>
                        <li><strong>指标收集</strong>：响应时间、TPS、错误率等关键指标统计</li>
                        <li><strong>性能报告</strong>：详细的性能分析报告和优化建议</li>
                    </ul>
                    <p><em>适用场景：性能基准测试、容量规划、系统调优、SLA验证</em></p>
                </div>
            </div>
        </div>

        <!-- 快速开始 -->
        <div id="quickstart" class="tab-content">
            <h2>🚀 快速开始</h2>
            
            <div class="highlight">
                <h4>📋 环境要求</h4>
                <ul>
                    <li><strong>Python</strong>：3.8+ (推荐 3.9 或 3.10)</li>
                    <li><strong>操作系统</strong>：Windows 10+, macOS 10.15+, Ubuntu 18.04+</li>
                    <li><strong>内存</strong>：至少 4GB RAM (推荐 8GB+)</li>
                    <li><strong>磁盘空间</strong>：至少 2GB 可用空间</li>
                    <li><strong>网络</strong>：稳定的互联网连接（用于下载依赖）</li>
                    <li><strong>可选工具</strong>：Docker Desktop, Git, VS Code</li>
                </ul>
            </div>
            
            <div class="quick-start">
                <h3>⚡ 一键启动</h3>
                <div class="step">
                    <div class="step-number">1</div>
                    <div>
                        <strong>克隆项目</strong>
                        <div class="code-block">
git clone https://gitee.com/liuxnstandy57/api-interface-testing.git
cd api-interface-testing
                        </div>
                    </div>
                </div>
                
                <div class="step">
                    <div class="step-number">2</div>
                    <div>
                        <strong>安装依赖</strong>
                        <div class="code-block">
python -m venv .venv
.venv\Scripts\activate  # Windows
pip install -r requirements.txt
                        </div>
                    </div>
                </div>
                
                <div class="step">
                    <div class="step-number">3</div>
                    <div>
                        <strong>配置环境</strong>
                        <div class="code-block">
cp .env.example .env
                        </div>
                    </div>
                </div>
                
                <div class="step">
                    <div class="step-number">4</div>
                    <div>
                        <strong>启动服务</strong>
                        <div class="code-block">
make run
# 或者: uvicorn app.main:app --reload
                        </div>
                    </div>
                </div>
            </div>

            <div class="highlight">
                <h4>🐳 Docker 快速启动</h4>
                <div class="code-block">
# 一键启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps
                </div>
            </div>

            <div class="table-container">
                <h3>📚 访问服务</h3>
                <table>
                    <thead>
                        <tr>
                            <th>服务</th>
                            <th>地址</th>
                            <th>描述</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>🎯 API 文档</td>
                            <td>http://localhost:8000/docs</td>
                            <td>Swagger UI</td>
                        </tr>
                        <tr>
                            <td>📖 ReDoc</td>
                            <td>http://localhost:8000/redoc</td>
                            <td>API 文档</td>
                        </tr>
                        <tr>
                            <td>❤️ 健康检查</td>
                            <td>http://localhost:8000/api/v1/health</td>
                            <td>服务状态</td>
                        </tr>
                        <tr>
                            <td>📊 测试报告</td>
                            <td>http://localhost:4040</td>
                            <td>Allure 报告</td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>

        <!-- 测试指南 -->
        <div id="testing" class="tab-content">
            <h2>🧪 测试指南</h2>
            
            <div class="highlight">
                <h4>🎯 测试策略</h4>
                <p>本框架采用分层测试策略，从单元测试到端到端测试，确保系统的各个层面都得到充分验证。遵循测试金字塔原则，以单元测试为基础，集成测试为支撑，UI测试为补充。</p>
                <p><strong>核心理念</strong>：快速反馈、持续验证、风险驱动、自动化优先</p>
            </div>
            
            <div class="table-container">
                <h3>🎯 测试类型</h3>
                <table>
                    <thead>
                        <tr>
                            <th>测试类型</th>
                            <th>描述</th>
                            <th>命令</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>🔧 单元测试</td>
                            <td>独立函数和类测试</td>
                            <td><code>make test-unit</code></td>
                        </tr>
                        <tr>
                            <td>🔗 集成测试</td>
                            <td>组件交互测试</td>
                            <td><code>make test-integration</code></td>
                        </tr>
                        <tr>
                            <td>🌐 API测试</td>
                            <td>REST API 接口测试</td>
                            <td><code>make test-api</code></td>
                        </tr>
                        <tr>
                            <td>📋 Excel数据驱动测试</td>
                            <td>基于Excel文件的数据驱动测试</td>
                            <td><code>pytest tests/test_api.py::TestExcelDataDriven -v</code></td>
                        </tr>
                        <tr>
                            <td>⚡ 性能测试</td>
                            <td>负载和压力测试</td>
                            <td><code>make test-performance</code></td>
                        </tr>
                    </tbody>
                </table>
            </div>

            <div class="feature-grid">
                <div class="feature-card">
                    <h3><span class="icon">⚡</span>快速测试</h3>
                    <div class="code-block">
# 运行所有测试
make test

# 生成测试报告
make allure-report

# 查看覆盖率
make test-coverage

# 代码质量检查
make lint
                    </div>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">🎯</span>精准测试</h3>
                    <div class="code-block">
# 运行指定文件
pytest tests/test_api.py -v

# 运行指定测试
pytest tests/test_api.py::test_create_user -v

# 并行执行
pytest -n auto

# 只运行失败的测试
pytest --lf
                    </div>
                </div>
            </div>

            <div class="highlight">
                <h4>📊 Allure 测试报告特性</h4>
                <ul>
                    <li>📈 <strong>测试概览</strong>: 通过率、失败率统计</li>
                    <li>🔍 <strong>详细分析</strong>: 执行步骤和错误追踪</li>
                    <li>📊 <strong>趋势图表</strong>: 历史测试数据对比</li>
                    <li>🏷️ <strong>智能分类</strong>: 按功能模块自动分组</li>
                    <li>📎 <strong>附件支持</strong>: 日志、截图自动关联</li>
                </ul>
            </div>
            
            <div class="feature-grid">
                <div class="feature-card">
                    <h3><span class="icon">🏆</span>测试最佳实践</h3>
                    <ul>
                        <li><strong>测试用例设计</strong>：遵循AAA模式（Arrange-Act-Assert）</li>
                        <li><strong>数据隔离</strong>：每个测试用例使用独立的测试数据</li>
                        <li><strong>断言明确</strong>：使用具体的断言信息，便于问题定位</li>
                        <li><strong>测试分层</strong>：单元测试覆盖业务逻辑，集成测试验证交互</li>
                        <li><strong>持续重构</strong>：定期重构测试代码，保持可维护性</li>
                        <li><strong>环境一致</strong>：开发、测试、生产环境保持一致性</li>
                    </ul>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">🚀</span>高级用法</h3>
                    <ul>
                        <li><strong>参数化测试</strong>：使用@pytest.mark.parametrize批量测试</li>
                        <li><strong>夹具管理</strong>：合理使用fixture管理测试资源</li>
                        <li><strong>标记分类</strong>：使用@pytest.mark标记不同类型测试</li>
                        <li><strong>插件扩展</strong>：开发自定义pytest插件增强功能</li>
                        <li><strong>并行执行</strong>：使用pytest-xdist提升执行效率</li>
                        <li><strong>覆盖率分析</strong>：结合pytest-cov分析代码覆盖率</li>
                    </ul>
                </div>
            </div>
            
            <div class="table-container">
                <h3>🔧 高级配置选项</h3>
                <table>
                    <thead>
                        <tr>
                            <th>配置项</th>
                            <th>说明</th>
                            <th>示例</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>测试标记</td>
                            <td>按标记运行特定测试</td>
                            <td><code>pytest -m "api and not slow"</code></td>
                        </tr>
                        <tr>
                            <td>并行执行</td>
                            <td>多进程并行测试</td>
                            <td><code>pytest -n 4</code></td>
                        </tr>
                        <tr>
                            <td>覆盖率报告</td>
                            <td>生成代码覆盖率报告</td>
                            <td><code>pytest --cov=app --cov-report=html</code></td>
                        </tr>
                        <tr>
                            <td>失败重试</td>
                            <td>失败测试自动重试</td>
                            <td><code>pytest --reruns 3</code></td>
                        </tr>
                        <tr>
                            <td>详细输出</td>
                            <td>显示详细测试信息</td>
                            <td><code>pytest -v -s</code></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>

        <!-- Excel测试 -->
        <div id="excel" class="tab-content">
            <h2>📊 Excel数据驱动测试</h2>
            
            <div class="highlight">
                <h4>🎯 Excel数据驱动测试概述</h4>
                <p>Excel数据驱动测试是一种高效的测试方法，通过将测试数据与测试逻辑分离，实现测试用例的批量执行和维护。本框架提供完整的Excel测试解决方案，支持复杂的API测试场景。</p>
                <p><strong>核心优势</strong>：数据与代码分离、非技术人员友好、批量测试执行、灵活的数据管理</p>
            </div>
            
            <div class="highlight">
                <h4>✨ 功能特性</h4>
                <ul>
                    <li>📊 支持.xlsx格式的Excel测试用例文件</li>
                    <li>🎯 多场景覆盖：用户创建、查询、系统接口等</li>
                    <li>🔄 动态数据生成：自动生成带时间戳的唯一测试数据</li>
                    <li>📈 智能数据筛选：支持按工作表、API方法、路径等条件筛选</li>
                    <li>🌐 完整中文支持：包括测试用例名称和数据</li>
                    <li>🔧 参数化支持：支持变量替换和动态参数</li>
                    <li>📝 断言配置：支持多种断言类型和自定义验证</li>
                </ul>
            </div>

            <div class="quick-start">
                <h3>🚀 快速开始</h3>
                <div class="step">
                    <div class="step-number">1</div>
                    <div>
                        <strong>生成测试数据</strong>
                        <div class="code-block">
python tests/data/generate_excel_testdata.py
                        </div>
                    </div>
                </div>
                
                <div class="step">
                    <div class="step-number">2</div>
                    <div>
                        <strong>运行Excel测试</strong>
                        <div class="code-block">
# 运行Excel数据驱动测试示例
pytest tests/test_excel_data_driven_example.py -v

# 生成Allure报告
pytest tests/test_excel_data_driven_example.py --alluredir=allure-results
                        </div>
                    </div>
                </div>
                
                <div class="step">
                    <div class="step-number">3</div>
                    <div>
                        <strong>查看测试报告</strong>
                        <div class="code-block">
# 启动Allure报告服务
allure serve allure-results
                        </div>
                    </div>
                </div>
            </div>

            <div class="table-container">
                <h3>📊 Excel文件结构</h3>
                <table>
                    <thead>
                        <tr>
                            <th>工作表</th>
                            <th>描述</th>
                            <th>测试用例数</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>用户创建</td>
                            <td>用户创建API测试用例</td>
                            <td>6个</td>
                        </tr>
                        <tr>
                            <td>用户查询</td>
                            <td>用户查询API测试用例</td>
                            <td>2个</td>
                        </tr>
                        <tr>
                            <td>系统接口</td>
                            <td>系统级API测试用例</td>
                            <td>2个</td>
                        </tr>
                    </tbody>
                </table>
            </div>

            <div class="feature-grid">
                <div class="feature-card">
                    <h3><span class="icon">👤</span>用户创建测试</h3>
                    <ul>
                        <li>正常场景：有效用户数据创建</li>
                        <li>边界测试：最小/最大年龄值</li>
                        <li>异常场景：无效邮箱格式、缺失必填字段</li>
                    </ul>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">🔍</span>用户查询测试</h3>
                    <ul>
                        <li>获取所有用户：验证用户列表返回</li>
                        <li>健康检查：系统状态验证</li>
                    </ul>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">🌐</span>系统接口测试</h3>
                    <ul>
                        <li>根路径访问：基础功能验证</li>
                        <li>健康检查接口：服务可用性验证</li>
                    </ul>
                </div>
            </div>
            
            <div class="table-container">
                <h3>📋 Excel数据格式规范</h3>
                <table>
                    <thead>
                        <tr>
                            <th>列名</th>
                            <th>说明</th>
                            <th>示例</th>
                            <th>必填</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>case_name</td>
                            <td>测试用例名称</td>
                            <td>创建用户-正常场景</td>
                            <td>是</td>
                        </tr>
                        <tr>
                            <td>method</td>
                            <td>HTTP请求方法</td>
                            <td>POST, GET, PUT, DELETE</td>
                            <td>是</td>
                        </tr>
                        <tr>
                            <td>url</td>
                            <td>API接口路径</td>
                            <td>/api/users</td>
                            <td>是</td>
                        </tr>
                        <tr>
                            <td>headers</td>
                            <td>请求头（JSON格式）</td>
                            <td>{"Content-Type": "application/json"}</td>
                            <td>否</td>
                        </tr>
                        <tr>
                            <td>request_data</td>
                            <td>请求体数据（JSON格式）</td>
                            <td>{"name": "张三", "age": 25}</td>
                            <td>否</td>
                        </tr>
                        <tr>
                            <td>expected_status</td>
                            <td>期望的HTTP状态码</td>
                            <td>200, 201, 400, 404</td>
                            <td>是</td>
                        </tr>
                        <tr>
                            <td>expected_response</td>
                            <td>期望的响应内容</td>
                            <td>{"status": "success"}</td>
                            <td>否</td>
                        </tr>
                        <tr>
                            <td>description</td>
                            <td>测试用例描述</td>
                            <td>验证用户创建功能</td>
                            <td>否</td>
                        </tr>
                    </tbody>
                </table>
            </div>
            
            <div class="feature-grid">
                <div class="feature-card">
                    <h3><span class="icon">🔧</span>高级功能</h3>
                    <ul>
                        <li><strong>变量替换</strong>：支持${variable}语法动态替换</li>
                        <li><strong>数据关联</strong>：前置接口返回值作为后续请求参数</li>
                        <li><strong>条件执行</strong>：基于条件判断是否执行测试用例</li>
                        <li><strong>循环测试</strong>：支持批量数据的循环测试</li>
                        <li><strong>自定义断言</strong>：支持复杂的响应验证逻辑</li>
                        <li><strong>数据生成</strong>：内置函数生成随机测试数据</li>
                    </ul>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">📊</span>数据管理</h3>
                    <ul>
                        <li><strong>多工作表</strong>：按功能模块组织测试用例</li>
                        <li><strong>数据隔离</strong>：每个工作表独立的测试环境</li>
                        <li><strong>版本控制</strong>：支持Excel文件的版本管理</li>
                        <li><strong>数据备份</strong>：自动备份测试数据</li>
                        <li><strong>导入导出</strong>：支持CSV、JSON格式转换</li>
                        <li><strong>数据验证</strong>：自动检查数据格式和完整性</li>
                    </ul>
                </div>
            </div>
            
            <div class="highlight">
                <h4>💡 实际应用案例</h4>
                <div class="code-block">
# 示例：用户管理API测试
# Excel文件：tests/data/api_test_data.xlsx
# 工作表：用户创建

| case_name | method | url | request_data | expected_status |
|-----------|--------|-----|--------------|----------------|
| 创建用户-正常 | POST | /api/users | {"name":"张三","age":25} | 201 |
| 创建用户-年龄边界 | POST | /api/users | {"name":"李四","age":18} | 201 |
| 创建用户-无效邮箱 | POST | /api/users | {"name":"王五","email":"invalid"} | 400 |
                </div>
                <p><strong>执行命令</strong>：<code>pytest tests/test_excel_data_driven_example.py::test_user_creation -v</code></p>
            </div>
        </div>

        <!-- 性能测试 -->
        <div id="performance" class="tab-content">
            <h2>⚡ 性能测试</h2>
            
            <div class="highlight">
                <h4>🎯 测试特性</h4>
                <ul>
                    <li>✅ 多场景支持：负载、压力、峰值测试</li>
                    <li>✅ 用户模拟：不同用户行为模式</li>
                    <li>✅ 实时监控：Web界面查看测试状态</li>
                    <li>✅ 测试报告：性能分析报告</li>
                    <li>✅ CI/CD集成：支持自动化测试</li>
                </ul>
            </div>

            <div class="feature-grid">
                <div class="feature-card">
                    <h3><span class="icon">🛠️</span>快速开始</h3>
                    <div class="code-block">
# 负载测试
make test-load

# 压力测试
make test-stress

# 启动Locust Web界面
make locust-web
                    </div>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">🎛️</span>Locust Web界面</h3>
                    <div class="code-block">
# 启动Web界面
locust -f tests/performance/locustfile.py --host=http://localhost:8000

# 访问 http://localhost:8089
                    </div>
                    <p>可以设置用户数量和孵化速率，实时查看请求统计和响应时间分布。</p>
                </div>
            </div>

            <div class="table-container">
                <h3>📊 测试场景</h3>
                <table>
                    <thead>
                        <tr>
                            <th>场景</th>
                            <th>用户数</th>
                            <th>持续时间</th>
                            <th>用途</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>负载测试</td>
                            <td>20</td>
                            <td>60秒</td>
                            <td>正常负载性能</td>
                        </tr>
                        <tr>
                            <td>压力测试</td>
                            <td>50</td>
                            <td>120秒</td>
                            <td>系统承受能力</td>
                        </tr>
                        <tr>
                            <td>峰值测试</td>
                            <td>100</td>
                            <td>60秒</td>
                            <td>突发负载处理</td>
                        </tr>
                    </tbody>
                </table>
            </div>

            <div class="highlight">
                <h4>📈 性能报告内容</h4>
                <ul>
                    <li>📊 <strong>总体统计</strong>：请求总数、失败率、平均响应时间、RPS</li>
                    <li>📈 <strong>响应时间分布</strong>：50%、90%、95%、99%百分位数</li>
                    <li>🔍 <strong>接口统计</strong>：各API接口性能数据</li>
                </ul>
            </div>
        </div>

        <!-- API文档 -->
        <div id="api" class="tab-content">
            <h2>📚 API接口文档</h2>
            
            <div class="highlight">
                <h4>🎯 API文档概述</h4>
                <p>本API采用RESTful设计风格，提供完整的用户管理功能和系统监控接口。所有接口支持JSON格式数据交换，遵循HTTP状态码标准，提供详细的错误信息和响应数据。</p>
                <p><strong>基础信息</strong>：Base URL: <code>http://localhost:8000</code> | 数据格式: JSON | 编码: UTF-8</p>
            </div>
            
            <div class="table-container">
                <h3>🏠 基础接口</h3>
                <table>
                    <thead>
                        <tr>
                            <th>方法</th>
                            <th>路径</th>
                            <th>描述</th>
                            <th>响应</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>GET</td>
                            <td>/</td>
                            <td>根路径欢迎信息</td>
                            <td>200</td>
                        </tr>
                        <tr>
                            <td>GET</td>
                            <td>/health</td>
                            <td>健康检查</td>
                            <td>200</td>
                        </tr>
                    </tbody>
                </table>
            </div>

            <div class="table-container">
                <h3>👤 用户管理接口</h3>
                <table>
                    <thead>
                        <tr>
                            <th>方法</th>
                            <th>路径</th>
                            <th>描述</th>
                            <th>请求体</th>
                            <th>响应</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>POST</td>
                            <td>/api/v1/users/</td>
                            <td>创建用户</td>
                            <td>UserCreate</td>
                            <td>201</td>
                        </tr>
                        <tr>
                            <td>GET</td>
                            <td>/api/v1/users/</td>
                            <td>获取所有用户</td>
                            <td>-</td>
                            <td>200</td>
                        </tr>
                        <tr>
                            <td>GET</td>
                            <td>/api/v1/users/{user_id}</td>
                            <td>根据ID获取用户</td>
                            <td>-</td>
                            <td>200/404</td>
                        </tr>
                        <tr>
                            <td>PUT</td>
                            <td>/api/v1/users/{user_id}</td>
                            <td>更新用户信息</td>
                            <td>UserUpdate</td>
                            <td>200/404</td>
                        </tr>
                        <tr>
                            <td>DELETE</td>
                            <td>/api/v1/users/{user_id}</td>
                            <td>删除用户</td>
                            <td>-</td>
                            <td>204/404</td>
                        </tr>
                    </tbody>
                </table>
            </div>

            <div class="feature-grid">
                <div class="feature-card">
                    <h3><span class="icon">📋</span>UserCreate（创建用户）</h3>
                    <div class="code-block">
{
  "name": "张三",
  "email": "zhangsan@example.com",
  "age": 25
}
                    </div>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">📝</span>UserUpdate（更新用户）</h3>
                    <div class="code-block">
{
  "name": "李四",
  "email": "lisi@example.com",
  "age": 30
}
                    </div>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">📄</span>UserResponse（用户响应）</h3>
                    <div class="code-block">
{
  "id": 1,
  "name": "张三",
  "email": "zhangsan@example.com",
  "age": 25,
  "created_at": "2024-01-01T00:00:00",
  "updated_at": "2024-01-01T00:00:00"
}
                    </div>
                </div>
            </div>

            <div class="table-container">
                <h3>⚠️ 错误测试接口</h3>
                <table>
                    <thead>
                        <tr>
                            <th>方法</th>
                            <th>路径</th>
                            <th>描述</th>
                            <th>响应码</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>GET</td>
                            <td>/api/v1/errors/400</td>
                            <td>请求错误</td>
                            <td>400</td>
                        </tr>
                        <tr>
                            <td>GET</td>
                            <td>/api/v1/errors/401</td>
                            <td>未授权</td>
                            <td>401</td>
                        </tr>
                        <tr>
                            <td>GET</td>
                            <td>/api/v1/errors/404</td>
                            <td>资源不存在</td>
                            <td>404</td>
                        </tr>
                        <tr>
                            <td>GET</td>
                            <td>/api/v1/errors/500</td>
                            <td>服务器内部错误</td>
                            <td>500</td>
                        </tr>
                    </tbody>
                </table>
            </div>
            
            <div class="feature-grid">
                <div class="feature-card">
                    <h3><span class="icon">📝</span>请求示例</h3>
                    <h4>创建用户</h4>
                    <div class="code-block">
# 请求
POST /api/v1/users/
Content-Type: application/json

{
  "name": "张三",
  "email": "zhangsan@example.com",
  "age": 25
}

# 响应 (201 Created)
{
  "id": 1,
  "name": "张三",
  "email": "zhangsan@example.com",
  "age": 25,
  "created_at": "2024-01-01T00:00:00",
  "updated_at": "2024-01-01T00:00:00"
}
                    </div>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">🔍</span>查询示例</h3>
                    <h4>获取用户列表</h4>
                    <div class="code-block">
# 请求
GET /api/v1/users/
Accept: application/json

# 响应 (200 OK)
[
  {
    "id": 1,
    "name": "张三",
    "email": "zhangsan@example.com",
    "age": 25,
    "created_at": "2024-01-01T00:00:00",
    "updated_at": "2024-01-01T00:00:00"
  }
]
                    </div>
                </div>
            </div>
            
            <div class="table-container">
                <h3>📋 HTTP状态码说明</h3>
                <table>
                    <thead>
                        <tr>
                            <th>状态码</th>
                            <th>含义</th>
                            <th>说明</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>200</td>
                            <td>OK</td>
                            <td>请求成功，返回请求的数据</td>
                        </tr>
                        <tr>
                            <td>201</td>
                            <td>Created</td>
                            <td>资源创建成功</td>
                        </tr>
                        <tr>
                            <td>204</td>
                            <td>No Content</td>
                            <td>请求成功，无返回内容（如删除操作）</td>
                        </tr>
                        <tr>
                            <td>400</td>
                            <td>Bad Request</td>
                            <td>请求参数错误或格式不正确</td>
                        </tr>
                        <tr>
                            <td>401</td>
                            <td>Unauthorized</td>
                            <td>未授权，需要身份验证</td>
                        </tr>
                        <tr>
                            <td>404</td>
                            <td>Not Found</td>
                            <td>请求的资源不存在</td>
                        </tr>
                        <tr>
                            <td>422</td>
                            <td>Unprocessable Entity</td>
                            <td>请求格式正确但语义错误</td>
                        </tr>
                        <tr>
                            <td>500</td>
                            <td>Internal Server Error</td>
                            <td>服务器内部错误</td>
                        </tr>
                    </tbody>
                </table>
            </div>
            
            <div class="highlight">
                <h4>🔐 认证与授权</h4>
                <p>当前版本的API暂未实现认证机制，所有接口均可直接访问。在生产环境中，建议实现以下认证方式：</p>
                <ul>
                    <li><strong>JWT Token</strong>：在请求头中添加 <code>Authorization: Bearer &lt;token&gt;</code></li>
                    <li><strong>API Key</strong>：在请求头中添加 <code>X-API-Key: &lt;your-api-key&gt;</code></li>
                    <li><strong>OAuth 2.0</strong>：标准的OAuth认证流程</li>
                </ul>
                
                <div class="highlight">
                    <h4>🔑 API Key 配置管理</h4>
                    <p><strong>重要更新</strong>：项目已实现API Key统一配置管理，消除硬编码风险。</p>
                    <ul>
                        <li><strong>配置文件</strong>：所有API Key统一在 <code>.env.example</code> 中管理</li>
                        <li><strong>环境变量</strong>：通过环境变量动态加载，支持不同环境配置</li>
                        <li><strong>安全实践</strong>：<code>.env</code> 文件已加入 <code>.gitignore</code>，防止敏感信息泄露</li>
                        <li><strong>配置验证</strong>：启动时自动验证配置完整性</li>
                    </ul>
                    
                    <p><strong>快速配置步骤：</strong></p>
                    <ol>
                        <li>复制模板：<code>cp .env.example .env</code></li>
                        <li>编辑配置：修改 <code>.env</code> 文件中的实际API Key值</li>
                        <li>验证配置：运行 <code>python -c "from app.core.config import settings; print('配置OK')"</code></li>
                    </ol>
                </div>
            </div>
            
            <div class="highlight">
                <h4>💡 使用建议</h4>
                <ul>
                    <li><strong>错误处理</strong>：始终检查HTTP状态码，根据错误响应调整请求</li>
                    <li><strong>数据验证</strong>：发送请求前验证数据格式和必填字段</li>
                    <li><strong>超时设置</strong>：设置合理的请求超时时间（建议30秒）</li>
                    <li><strong>重试机制</strong>：对于网络错误实现指数退避重试</li>
                    <li><strong>日志记录</strong>：记录请求和响应信息便于调试</li>
                </ul>
            </div>
        </div>

        <!-- 部署运维 -->
        <div id="deployment" class="tab-content">
            <h2>🐳 部署运维</h2>
            
            <div class="feature-grid">
                <div class="feature-card">
                    <h3><span class="icon">🚀</span>快速启动</h3>
                    <div class="code-block">
# 一键启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps
                    </div>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">📦</span>镜像构建</h3>
                    <div class="code-block">
# 构建镜像
docker build -t apitest:latest .

# 运行容器
docker run -d -p 8000:8000 --name apitest apitest:latest
                    </div>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">🔧</span>常用命令</h3>
                    <div class="code-block">
# 查看日志
docker-compose logs -f api

# 进入容器
docker exec -it apitest /bin/bash

# 重启服务
docker-compose restart api
                    </div>
                </div>
            </div>

            <div class="table-container">
                <h3>📊 服务地址</h3>
                <table>
                    <thead>
                        <tr>
                            <th>服务</th>
                            <th>地址</th>
                            <th>描述</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>API 服务</td>
                            <td>http://localhost:8000</td>
                            <td>主要服务</td>
                        </tr>
                        <tr>
                            <td>API 文档</td>
                            <td>http://localhost:8000/docs</td>
                            <td>接口文档</td>
                        </tr>
                        <tr>
                            <td>测试报告</td>
                            <td>http://localhost:4040</td>
                            <td>Allure 报告</td>
                        </tr>
                    </tbody>
                </table>
            </div>

            <div class="highlight">
                <h4>🔍 健康检查</h4>
                <div class="code-block">
# 检查服务状态
curl http://localhost:8000/health

# 检查API文档
curl http://localhost:8000/docs
                </div>
            </div>

            <div class="highlight">
                <h3>🌍 多环境部署方案</h3>
                <p>支持开发、测试、预发布、生产等多种环境的部署，每种环境都有对应的配置和部署策略。</p>
            </div>

            <div class="table-container">
                <h3>🏗️ 环境对比</h3>
                <table>
                    <thead>
                        <tr>
                            <th>环境</th>
                            <th>用途</th>
                            <th>配置文件</th>
                            <th>部署方式</th>
                            <th>监控级别</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>开发环境</td>
                            <td>本地开发调试</td>
                            <td>development.yaml</td>
                            <td>本地运行/Docker</td>
                            <td>基础</td>
                        </tr>
                        <tr>
                            <td>测试环境</td>
                            <td>功能测试验证</td>
                            <td>testing.yaml</td>
                            <td>Docker Compose</td>
                            <td>中等</td>
                        </tr>
                        <tr>
                            <td>预发布环境</td>
                            <td>上线前验证</td>
                            <td>staging.yaml</td>
                            <td>Kubernetes/Docker Swarm</td>
                            <td>高</td>
                        </tr>
                        <tr>
                            <td>生产环境</td>
                            <td>正式服务</td>
                            <td>production.yaml</td>
                            <td>Kubernetes/云服务</td>
                            <td>完整</td>
                        </tr>
                    </tbody>
                </table>
            </div>

            <div class="feature-grid">
                <div class="feature-card">
                    <h3><span class="icon">💻</span>开发环境部署</h3>
                    <div class="code-block">
# 方式1：直接运行
python -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

# 方式2：使用Make命令
make dev

# 方式3：Docker开发模式
docker-compose -f docker-compose.dev.yml up

# 环境变量设置
export ENVIRONMENT=development
export DEBUG=true
                    </div>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">🧪</span>测试环境部署</h3>
                    <div class="code-block">
# Docker Compose部署
docker-compose -f docker-compose.test.yml up -d

# 运行自动化测试
docker-compose exec api pytest tests/ --alluredir=allure-results

# 生成测试报告
docker-compose exec api allure serve allure-results

# 环境变量设置
export ENVIRONMENT=testing
export TEST_DATABASE_URL=postgresql://test:test@db:5432/testdb
                    </div>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">🚀</span>生产环境部署</h3>
                    <div class="code-block">
# Kubernetes部署
kubectl apply -f k8s/

# Docker Swarm部署
docker stack deploy -c docker-compose.prod.yml apitest

# 使用Gunicorn
gunicorn app.main:app -w 4 -k uvicorn.workers.UvicornWorker \
  --bind 0.0.0.0:8000 --access-logfile - --error-logfile -

# 环境变量设置
export ENVIRONMENT=production
export DEBUG=false
export SECRET_KEY=your-production-secret-key
                    </div>
                </div>
            </div>

            <div class="highlight">
                <h4>☁️ 云平台部署</h4>
                <div class="feature-grid">
                    <div class="feature-card">
                        <h4><span class="icon">🐳</span>Docker Hub部署</h4>
                        <div class="code-block">
# 构建并推送镜像
docker build -t your-registry/apitest:v1.0.0 .
docker push your-registry/apitest:v1.0.0

# 部署到服务器
docker pull your-registry/apitest:v1.0.0
docker run -d -p 8000:8000 \
  --env-file .env.prod \
  --name apitest-prod \
  your-registry/apitest:v1.0.0
                        </div>
                    </div>
                    
                    <div class="feature-card">
                        <h4><span class="icon">☁️</span>云服务部署</h4>
                        <div class="code-block">
# 阿里云容器服务
kubectl apply -f deploy/aliyun/

# 腾讯云TKE
kubectl apply -f deploy/tencent/

# AWS ECS
aws ecs create-service --cli-input-json file://deploy/aws/service.json

# Azure Container Instances
az container create --resource-group myResourceGroup \
  --name apitest --image your-registry/apitest:latest
                        </div>
                    </div>
                </div>
            </div>

            <div class="table-container">
                <h3>🔧 部署检查清单</h3>
                <table>
                    <thead>
                        <tr>
                            <th>检查项</th>
                            <th>开发环境</th>
                            <th>测试环境</th>
                            <th>生产环境</th>
                            <th>说明</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>环境变量配置</td>
                            <td>✅</td>
                            <td>✅</td>
                            <td>✅</td>
                            <td>检查所有必需的环境变量</td>
                        </tr>
                        <tr>
                            <td>数据库连接</td>
                            <td>✅</td>
                            <td>✅</td>
                            <td>✅</td>
                            <td>验证数据库连接和权限</td>
                        </tr>
                        <tr>
                            <td>外部服务依赖</td>
                            <td>❌</td>
                            <td>✅</td>
                            <td>✅</td>
                            <td>检查第三方API可用性</td>
                        </tr>
                        <tr>
                            <td>SSL证书</td>
                            <td>❌</td>
                            <td>❌</td>
                            <td>✅</td>
                            <td>生产环境必须配置HTTPS</td>
                        </tr>
                        <tr>
                            <td>监控告警</td>
                            <td>❌</td>
                            <td>✅</td>
                            <td>✅</td>
                            <td>配置应用和基础设施监控</td>
                        </tr>
                        <tr>
                            <td>日志收集</td>
                            <td>✅</td>
                            <td>✅</td>
                            <td>✅</td>
                            <td>确保日志正常输出和收集</td>
                        </tr>
                        <tr>
                            <td>备份策略</td>
                            <td>❌</td>
                            <td>✅</td>
                            <td>✅</td>
                            <td>数据库和配置文件备份</td>
                        </tr>
                        <tr>
                            <td>性能测试</td>
                            <td>❌</td>
                            <td>✅</td>
                            <td>✅</td>
                            <td>负载测试和压力测试</td>
                        </tr>
                    </tbody>
                </table>
            </div>

            <div class="highlight">
                <h4>🛡️ 部署安全建议</h4>
                <ul>
                    <li><strong>密钥管理</strong>：使用密钥管理服务（如AWS KMS、Azure Key Vault）存储敏感信息</li>
                    <li><strong>网络安全</strong>：配置防火墙规则，限制不必要的端口访问</li>
                    <li><strong>容器安全</strong>：使用非root用户运行容器，定期更新基础镜像</li>
                    <li><strong>访问控制</strong>：实施最小权限原则，定期审查访问权限</li>
                    <li><strong>安全扫描</strong>：集成安全扫描工具，检测代码和依赖漏洞</li>
                </ul>
            </div>

            <div class="highlight">
                <h3>⚙️ 配置说明</h3>
                <p>项目采用分层配置管理，支持多环境配置和环境变量覆盖，确保配置的灵活性和安全性。</p>
                
                <h4>📁 配置文件结构</h4>
                <ul>
                    <li><strong>config/development.yaml</strong> - 开发环境配置</li>
                    <li><strong>config/production.yaml</strong> - 生产环境配置</li>
                    <li><strong>config/testing.yaml</strong> - 测试环境配置</li>
                    <li><strong>.env</strong> - 环境变量文件（敏感信息）</li>
                    <li><strong>.env.example</strong> - 环境变量模板</li>
                </ul>
            </div>

            <div class="table-container">
                <h3>🔧 核心配置项</h3>
                <table>
                    <thead>
                        <tr>
                            <th>配置分类</th>
                            <th>配置项</th>
                            <th>说明</th>
                            <th>示例值</th>
                            <th>必填</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td rowspan="5">应用配置</td>
                            <td>app.name</td>
                            <td>应用名称</td>
                            <td>"API Test Demo"</td>
                            <td>是</td>
                        </tr>
                        <tr>
                            <td>app.version</td>
                            <td>应用版本</td>
                            <td>"1.0.0"</td>
                            <td>是</td>
                        </tr>
                        <tr>
                            <td>app.debug</td>
                            <td>调试模式</td>
                            <td>true/false</td>
                            <td>否</td>
                        </tr>
                        <tr>
                            <td>app.host</td>
                            <td>监听地址</td>
                            <td>"0.0.0.0"</td>
                            <td>否</td>
                        </tr>
                        <tr>
                            <td>app.port</td>
                            <td>监听端口</td>
                            <td>8000</td>
                            <td>否</td>
                        </tr>
                        <tr>
                            <td rowspan="4">日志配置</td>
                            <td>logging.level</td>
                            <td>日志级别</td>
                            <td>"DEBUG"/"INFO"/"WARNING"/"ERROR"</td>
                            <td>否</td>
                        </tr>
                        <tr>
                            <td>logging.file</td>
                            <td>日志文件路径</td>
                            <td>"logs/app.log"</td>
                            <td>否</td>
                        </tr>
                        <tr>
                            <td>logging.max_size</td>
                            <td>日志文件最大大小</td>
                            <td>"10MB"</td>
                            <td>否</td>
                        </tr>
                        <tr>
                            <td>logging.backup_count</td>
                            <td>日志备份数量</td>
                            <td>5</td>
                            <td>否</td>
                        </tr>
                        <tr>
                            <td rowspan="3">数据库配置</td>
                            <td>database.url</td>
                            <td>数据库连接URL</td>
                            <td>"sqlite:///./test.db"</td>
                            <td>是</td>
                        </tr>
                        <tr>
                            <td>database.pool_size</td>
                            <td>连接池大小</td>
                            <td>5</td>
                            <td>否</td>
                        </tr>
                        <tr>
                            <td>database.echo</td>
                            <td>SQL日志输出</td>
                            <td>true/false</td>
                            <td>否</td>
                        </tr>
                        <tr>
                            <td rowspan="3">安全配置</td>
                            <td>security.secret_key</td>
                            <td>JWT密钥</td>
                            <td>"${SECRET_KEY}"</td>
                            <td>是</td>
                        </tr>
                        <tr>
                            <td>security.algorithm</td>
                            <td>加密算法</td>
                            <td>"HS256"</td>
                            <td>否</td>
                        </tr>
                        <tr>
                            <td>security.access_token_expire_minutes</td>
                            <td>Token过期时间（分钟）</td>
                            <td>30</td>
                            <td>否</td>
                        </tr>
                    </tbody>
                </table>
            </div>

            <div class="feature-grid">
                <div class="feature-card">
                    <h3><span class="icon">🔐</span>环境变量配置</h3>
                    <div class="code-block">
# .env 文件示例 - 完整配置
# 应用配置
ENVIRONMENT=development
SECRET_KEY=your-super-secret-key-here
JWT_SECRET_KEY=your-jwt-secret-key-here
DEBUG=true

# 数据库配置
DATABASE_URL=sqlite:///./test.db

# DeepSeek API 配置 (重要：统一管理)
DEEPSEEK_API_KEY=sk-your-deepseek-api-key-here
DEEPSEEK_BASE_URL=https://api.deepseek.com
DEEPSEEK_MODEL=deepseek-chat
DEEPSEEK_MAX_TOKENS=4000
DEEPSEEK_TEMPERATURE=0.7

# 测试配置
TEST_AUTH_TOKEN=Bearer test-token

# Redis配置
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=your-redis-password

# 安全提示：
# 1. 复制 .env.example 为 .env
# 2. 修改实际的API Key值
# 3. 不要提交 .env 到版本控制
                    </div>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">📝</span>YAML配置示例</h3>
                    <div class="code-block">
# config/development.yaml
app:
  name: "API Test Demo"
  version: "1.0.0"
  debug: true
  host: "0.0.0.0"
  port: 8000

logging:
  level: "DEBUG"
  file: "logs/app.log"
  console: true

database:
  url: "sqlite:///./test.db"
  echo: true

security:
  secret_key: "${SECRET_KEY}"
  algorithm: "HS256"
                    </div>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">🔄</span>配置加载机制</h3>
                    <div class="code-block">
# Python代码中使用配置
from utils.config_manager import get_config_manager

# 获取配置管理器
config = get_config_manager()

# 获取应用配置
app_config = config.get_app_config()
print(app_config['name'])  # API Test Demo

# 获取数据库配置
db_url = config.get('database.url')
print(db_url)  # sqlite:///./test.db

# 检查环境
if config.is_development():
    print("开发环境")
                    </div>
                </div>
            </div>

            <div class="highlight">
                <h4>🛡️ 配置安全最佳实践</h4>
                <ul>
                    <li><strong>敏感信息隔离</strong>：密钥、密码等敏感信息放在.env文件中，不提交到版本库</li>
                    <li><strong>环境变量优先</strong>：环境变量会覆盖YAML配置文件中的值</li>
                    <li><strong>配置验证</strong>：启动时验证必需配置项是否存在</li>
                    <li><strong>默认值设置</strong>：为非必需配置项提供合理的默认值</li>
                    <li><strong>配置分层</strong>：按环境分离配置，避免配置混乱</li>
                </ul>
            </div>

            <div class="feature-grid">
                <div class="feature-card">
                    <h3><span class="icon">🚀</span>生产部署</h3>
                    <div class="code-block">
# 使用 gunicorn
gunicorn app.main:app -w 4 -k uvicorn.workers.UvicornWorker

# 使用 systemd
sudo systemctl start apitest

# 设置生产环境变量
export ENVIRONMENT=production
export DEBUG=false
                    </div>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">🔧</span>配置管理命令</h3>
                    <div class="code-block">
# 验证配置文件
python -c "from utils.config_manager import get_config_manager; print(get_config_manager().config)"

# 查看当前环境配置
python scripts/show_config.py

# 生成配置模板
python scripts/generate_config.py --env production
                    </div>
                </div>
            </div>
        </div>

        <!-- 测试场景分析 -->
        <div id="scenarios" class="tab-content">
            <h2>🎯 测试场景与结果分析</h2>
            
            <div class="feature-grid">
                <div class="feature-card">
                    <h3><span class="icon">🔄</span>流程测试应用场景</h3>
                    <ul>
                        <li><strong>用户注册登录流程</strong>：注册→验证→登录→获取token</li>
                        <li><strong>订单处理流程</strong>：创建订单→支付→发货→确认收货</li>
                        <li><strong>权限验证流程</strong>：登录→获取权限→访问资源→权限校验</li>
                        <li><strong>数据同步流程</strong>：数据上传→处理→存储→同步确认</li>
                    </ul>
                    <div class="highlight">
                        <h4>📊 结果分析要点</h4>
                        <ul>
                            <li>🔍 <strong>流程完整性</strong>：每个步骤是否正确执行</li>
                            <li>🔄 <strong>数据传递</strong>：上下游接口数据是否正确传递</li>
                            <li>⚠️ <strong>异常处理</strong>：中间步骤失败时的回滚机制</li>
                            <li>⏱️ <strong>时序依赖</strong>：接口调用顺序和时间依赖关系</li>
                        </ul>
                    </div>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">📊</span>数据驱动测试应用场景</h3>
                    <ul>
                        <li><strong>参数边界测试</strong>：最大值、最小值、空值、特殊字符</li>
                        <li><strong>多用户场景</strong>：不同角色、权限、状态的用户数据</li>
                        <li><strong>业务规则验证</strong>：各种业务场景的数据组合测试</li>
                        <li><strong>国际化测试</strong>：多语言、多地区、多时区数据</li>
                    </ul>
                    <div class="highlight">
                        <h4>📈 结果分析维度</h4>
                        <ul>
                            <li>📊 <strong>覆盖率分析</strong>：测试用例覆盖的数据场景比例</li>
                            <li>❌ <strong>失败模式</strong>：哪类数据容易导致测试失败</li>
                            <li>🎯 <strong>数据质量</strong>：测试数据的有效性和完整性</li>
                            <li>🔄 <strong>回归分析</strong>：数据变更对测试结果的影响</li>
                        </ul>
                    </div>
                </div>
                
                <div class="feature-card">
                    <h3><span class="icon">⚡</span>压力测试应用场景</h3>
                    <ul>
                        <li><strong>高并发场景</strong>：秒杀、抢购、大促活动</li>
                        <li><strong>大数据量处理</strong>：批量导入、数据迁移、报表生成</li>
                        <li><strong>长时间运行</strong>：7x24小时服务稳定性测试</li>
                        <li><strong>资源限制</strong>：内存、CPU、网络带宽瓶颈测试</li>
                    </ul>
                    <div class="highlight">
                        <h4>📊 性能指标分析</h4>
                        <ul>
                            <li>⏱️ <strong>响应时间</strong>：平均、最大、95%分位数响应时间</li>
                            <li>🚀 <strong>吞吐量</strong>：每秒请求数(RPS)和事务处理能力</li>
                            <li>⚠️ <strong>错误率</strong>：请求失败率和错误类型分布</li>
                            <li>💻 <strong>资源使用</strong>：CPU、内存、磁盘、网络使用率</li>
                        </ul>
                    </div>
                </div>
            </div>

            <div class="table-container">
                <h3>📈 测试结果分析流程</h3>
                <table>
                    <thead>
                        <tr>
                            <th>阶段</th>
                            <th>分析内容</th>
                            <th>关键指标</th>
                            <th>处理建议</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>🔍 数据收集</td>
                            <td>收集测试执行日志、性能数据、错误信息</td>
                            <td>执行时间、成功率、错误日志</td>
                            <td>确保数据完整性和准确性</td>
                        </tr>
                        <tr>
                            <td>📊 统计分析</td>
                            <td>计算通过率、失败率、性能指标统计</td>
                            <td>通过率、平均响应时间、TPS</td>
                            <td>识别异常数据和趋势变化</td>
                        </tr>
                        <tr>
                            <td>🎯 问题定位</td>
                            <td>分析失败用例、性能瓶颈、错误根因</td>
                            <td>错误类型、瓶颈位置、影响范围</td>
                            <td>优先处理高频和高影响问题</td>
                        </tr>
                        <tr>
                            <td>📋 报告生成</td>
                            <td>生成测试报告、趋势分析、改进建议</td>
                            <td>测试覆盖率、质量评分、风险等级</td>
                            <td>提供可执行的改进方案</td>
                        </tr>
                    </tbody>
                </table>
            </div>

            <div class="quick-start">
                <h3>🛠️ 测试分析工具链</h3>
                <div class="step">
                    <div class="step-number">1</div>
                    <div>
                        <strong>Allure报告分析</strong>
                        <div class="code-block">
# 生成详细测试报告
allure generate allure-results --clean -o allure-report

# 查看趋势分析
allure serve allure-results
                        </div>
                    </div>
                </div>
                
                <div class="step">
                    <div class="step-number">2</div>
                    <div>
                        <strong>性能数据分析</strong>
                        <div class="code-block">
# Locust性能测试报告
locust -f tests/performance/locustfile.py --headless -u 50 -r 10 -t 60s --html=performance_report.html

# 分析响应时间分布
python tests/performance/analyzer.py
                        </div>
                    </div>
                </div>
                
                <div class="step">
                    <div class="step-number">3</div>
                    <div>
                        <strong>日志分析</strong>
                        <div class="code-block">
# 查看错误日志
grep "ERROR" logs/api.log | head -20

# 分析接口调用统计
awk '{print $7}' logs/access.log | sort | uniq -c | sort -nr
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- 页脚 -->
        <div class="footer">
            <p>🚀 API自动化测试框架 - 让测试更简单、更高效</p>
            <p>基于 FastAPI + pytest 构建的企业级解决方案</p>
            <p>📞 如有问题，请查看项目文档或提交 <a href="https://gitee.com/liuxnstandy57/api-interface-testing/issues" target="_blank" style="color: #667eea; text-decoration: none;">Gitee Issues</a></p>
        </div>
    </div>

    <script>
        function showTab(tabName) {
            // 隐藏所有标签内容
            const contents = document.querySelectorAll('.tab-content');
            contents.forEach(content => {
                content.classList.remove('active');
            });
            
            // 移除所有标签的激活状态
            const tabs = document.querySelectorAll('.nav-tab');
            tabs.forEach(tab => {
                tab.classList.remove('active');
            });
            
            // 显示选中的标签内容
            document.getElementById(tabName).classList.add('active');
            
            // 激活选中的标签
            event.target.classList.add('active');
        }
        
        // 页面加载完成后的初始化
        document.addEventListener('DOMContentLoaded', function() {
            // 可以在这里添加更多的初始化逻辑
            console.log('API自动化测试框架指南页面已加载');
        });
    </script>
</body>
</html>